package com.jianganming.factory.method;


/**
 * 工厂方法
 * 内部角色：抽象工厂，具体工厂实现，抽象产品，具体产品实现
 * 抽象工厂中有生产抽象产品的方法
 * 具体工厂中有实现抽象工厂中的方法，生产具体的产品
 */
public class MethodFactory {
    public static void main(String[] args) {
        CarFactory carFactory = new BaoMaCarFactory();
        Car car = carFactory.makeCar();
        car.run();
        CarFactory carFactory1 = new BenChiCarFactory();
        Car car1 = carFactory1.makeCar();
        car1.run();
    }
}

/**
 * 抽象工厂：生产汽车的工厂
 */
interface CarFactory{
    Car makeCar();
}

/**
 * 工厂的实现：具体生产宝马类型的汽车
 */
class BaoMaCarFactory implements CarFactory {
    @Override
    public Car makeCar() {
        return new BaoMaCar("宝马");
    }
}
/**
 * 工厂的实现：具体生产奔驰类型的汽车
 */
class BenChiCarFactory implements CarFactory {
    @Override
    public Car makeCar() {
        return new BenChiCarCar("奔驰");
    }
}

/**
 * 具体产品：宝马汽车
 */
class BaoMaCar implements Car{
    private String name;

    public BaoMaCar(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println(name+"：百公里加速5秒");
    }
}

/**
 * 具体产品：奔驰汽车
 */
class BenChiCarCar implements Car{
    private String name;

    public BenChiCarCar(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println(name+"：百公里加速7秒");
    }
}

/**
 * 抽象产品
 */
interface Car{
    void run();
}
